#include <iostream>
#include <stack>
using namespace std;

/*
std::stack 类是一种容器适配器，它给予程序员栈的功能——特别是 FILO（先进后出）数据结构。 
*/

// 向栈中添加元素
void pushElements(stack<double>& s) {
    s.push(10.5);
    s.push(20.5);
    s.push(30.5);
    cout << "元素已压入栈: 10.5, 20.5, 30.5" << endl;
}

// 弹出栈顶元素
void popElement(stack<double>& s) {
    if (!s.empty()) {
        cout << "弹出栈顶元素: " << s.top() << endl;
        s.pop();
    } else {
        cout << "栈为空，无法弹出元素。" << endl;
    }
}

// 访问栈顶元素
void accessTop(const stack<double>& s) {
    if (!s.empty()) {
        cout << "栈顶元素: " << s.top() << endl;
    } else {
        cout << "栈为空，无法访问栈顶元素。" << endl;
    }
}

// 检查栈是否为空
void checkEmpty(const stack<double>& s) {
    if (s.empty()) {
        cout << "栈为空。" << endl;
    } else {
        cout << "栈不为空。" << endl;
    }
}

// 获取栈的大小
void checkSize(const stack<double>& s) {
    cout << "栈的大小: " << s.size() << endl;
}

int main() {
    stack<double> s;

    // 调用函数向栈中添加元素
    pushElements(s);

    // 调用函数访问栈顶元素
    accessTop(s);

    // 调用函数检查栈是否为空
    checkEmpty(s);

    // 调用函数获取栈的大小
    checkSize(s);

    // 调用函数弹出栈顶元素
    popElement(s);

    // 再次检查栈的状态
    accessTop(s);
    checkSize(s);
    checkEmpty(s);

    return 0; // 程序结束
}
